package evemanutool.gui.corp.components;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Paint;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.TimeZone;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.DefaultDrawingSupplier;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.StandardXYItemRenderer;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.time.Millisecond;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.RectangleInsets;
import evemanutool.data.cache.TradeEntry;
import evemanutool.data.cache.TradeEntry.HistoryType;
import evemanutool.data.cache.TradeHistoryEntry;
@SuppressWarnings("serial")
public class TradeHistoryPanel extends JPanel {
private JFreeChart chart;
private XYPlot plot;
public TradeHistoryPanel(String label, String numUnit) {
//Create Industry stats chart.
setLayout(new BorderLayout());
ChartPanel chartPanel = new ChartPanel(createChart(label, numUnit));
//Disable popup.
chartPanel.setPopupMenu(null);
add(chartPanel, BorderLayout.CENTER);
}
public void setTradeHistory(TradeHistoryEntry l, HistoryType key) {
plot.setDataset(createDataSet(l.getHistory(), key));
chart.fireChartChanged();
}
private JFreeChart createChart(String label, String numUnit) {
//Create chart.
chart = ChartFactory.createTimeSeriesChart(
label, "Date", numUnit, new TimeSeriesCollection(TimeZone.getTimeZone("UTC")), false, true, false);
//Set appearance.
chart.setBackgroundPaint(getBackground());
chart.setPadding(new RectangleInsets(10, 10, 10, 15));
//Override colors.
chart.getPlot().setDrawingSupplier(new DefaultDrawingSupplier(
new Paint[] {Color.BLUE},
DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE));
plot = chart.getXYPlot();
plot.setBackgroundPaint(Color.WHITE);
plot.setDomainGridlinePaint(Color.BLACK);
plot.setRangeGridlinePaint(Color.BLACK);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(false);
XYItemRenderer renderer = plot.getRenderer();
if (renderer instanceof StandardXYItemRenderer) {
renderer.setSeriesStroke(0, new BasicStroke(2.0f));
renderer.setSeriesStroke(1, new BasicStroke(2.0f));
}
//Formatting.
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("YYYY-MM-dd"));
NumberAxis axisY = (NumberAxis) plot.getRangeAxis();
axisY.setAutoRangeMinimumSize(10);
axisY.setNumberFormatOverride(NumberFormat.getIntegerInstance());
return chart;
}
private XYDataset createDataSet(Collection<TradeEntry> l, HistoryType key) {
TimeSeriesCollection dataSet = new TimeSeriesCollection(TimeZone.getTimeZone("UTC"));
TimeSeries s1 = new TimeSeries("Trend");
for (TradeEntry tHE : l) {
s1.add(new Millisecond(tHE.getDate()), tHE.getValue(key));
}
dataSet.addSeries(s1);
return dataSet;
}
}